#include<bits/stdc++.h>
using namespace std;

class Solution {
public:
    inline bool judge(vector<int>& nums, int i){
        return (!i || nums[i] > nums[i - 1]) && (i == nums.size() - 1 || nums[i] > nums[i + 1]);
    }

    int findPeakElement(vector<int>& nums) {
        int low = 0, high = nums.size() - 1, mid;
        while(low < high){
            mid = (low + high) / 2;
            if(judge(nums, mid))return mid;
            else if(nums[mid] < nums[mid + 1])low = mid + 1;
            else if(nums[mid] > nums[mid + 1])high = mid;
        }
        return low;
    }
};

/**
 * 利用二分
 * 如果 nums[mid] < nums[mid + 1] 那么在 [mid + 1, high] 中一定存在峰值
 * 如果 nums[mid] > nums[mid + 1] 那么在 [low, mid] 中一定存在峰值。
 */